#ifndef CSCHDATACOLLECTOR_H
#define CSCHDATACOLLECTOR_H


#include "cjgboxdata.h"

#include <QHash>
#include <qtypes.h>
class QString;
class CSysParamData;

struct SSCHDATAINPUT
{
    int Version;//数据版本，与数据库不同则重新获取数据
    int iPlcSeqNum;//PLC序列号
    QVector <QVector<CJgOrder *>> OrderGroupByDeadLine;//订单数据，以货期进行分组的订单指针记录，记录里面已经进行了排序，按交货时间和投产时间

    QHash<QString /*keyStr*/, CSysParamData* /* pParam*/> hParamSet;//参数集

    // QHash<QString /*localOrderNum*/, CJgOrder*> hOrders;//订单集合，用于快速查找的哈希
    // QHash<qlonglong /*boxid*/, CJgBoxData*> hBoxs;//筐集合，用于快速查找的哈希
    // QHash<qlonglong /*OrderProcessId*/, CJgOrderProcess*> hOrderProcesses;//订单工序集合，用于快速查找的哈希
    // QHash<qlonglong /*BoxProcessId*/, CJgBoxProcessData*> hBoxProcesses;//筐工序集合，用于快速查找的哈希
    // QHash<qlonglong /*reworkId*/, CJgReworkData*> hReworks;//返工集合，用于快速查找的哈希

    // int getUnSendCnt(CJgOrderProcess * pOp);//获取工序未发出和未完成的件数，-1表示出错
    // QSet<CJgBoxData*> getNextCanDoBox(CJgOrderProcess * pOp);//获取当前工序下一步可以做的筐数，要求前置工序全部做完或只有一道没有做且是回库或在做状态

    // CJgOrder * getOrderByLocalOrderNum(QString vLocalOrderNum);
    // CJgBoxData * getBoxById(qlonglong vBoxRecordId);
    // CJgOrderProcess * getOrderProcessById(qlonglong vOrderProcessId);
    // CJgBoxProcessData * getBoxProcessById(qlonglong vBoxProcessId,qlonglong vBoxId = 0);
    // CJgReworkData * getRework(qlonglong vReworkId, qlonglong vBoxProcessId=0, qlonglong vBoxId = 0);

};

class CSchDataCollector
{
public:
    CSchDataCollector();

    static CJgBoxData * FindBoxByNum(SSCHDATAINPUT * lpIn, QString vBoxNum);
    static CJgOrderProcess * FindProcessByOrderPartSeq(SSCHDATAINPUT * lpIn, CJgBoxData * pBox);
    static CJgOrderProcess * findOrderProcess(SSCHDATAINPUT * vp,qlonglong vOrderProcess);
};

#endif // CSCHDATACOLLECTOR_H
